package com.syh.core.ddd.domain;

import org.apache.commons.lang3.RandomStringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.regex.Pattern;

/**
 * Created by soci.song on 2018/9/28.
 */
public class CodeGenerateUtil {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");

    /**
     * 生成单号
     * @param exp 订单前缀
     * @param key 一般为用户id，降低code重复几率
     * @return
     */
    public static String codeGenerate(String exp,Long key){
        //订单编号前缀
        StringBuffer codeStr = new StringBuffer(exp);
        //时间线
        codeStr.append(sdf.format(new Date()));
        //用0将不足八位的key补全至八位数
        codeStr.append(String.format("%08d", key));
        //生成8位数的随机号
        codeStr.append(RandomStringUtils.randomNumeric(8));
        return codeStr.toString();
    }

    /**
     * 生成申请编号
     * @param exp 编码前缀
     * @param key 一般为用户id，降低code重复几率
     * @return
     */
    public static String applyCodeGenerate(String exp,Long key){
        //订单编号前缀
        StringBuffer codeStr = new StringBuffer(exp);
        //时间线
        codeStr.append(sdf.format(new Date()));
        //用0将不足八位的key补全至八位数
        codeStr.append(String.format("%08d", key));
        //生成6位数的随机号
        codeStr.append(RandomStringUtils.randomNumeric(6));
        return codeStr.toString();
    }

    /**
     * 生成商家编号
     * @param exp 编码前缀
     * @return
     */
    public static String merchantCodeGenerate(String exp){
        //商家编码前缀
        StringBuffer codeStr = new StringBuffer(exp);
        //生成6位数的随机号
        codeStr.append(randomHexString(4));
        return codeStr.toString();
    }
    /**
     * 生成运营商编号
     * @param exp 编码前缀
     * @return
     */
    public static String operaCodeGenerate(String exp){
        //商家编码前缀
        StringBuffer codeStr = new StringBuffer(exp);
        return codeStr.toString();
    }
    public static boolean checkExp(String regexp,String code){
        return Pattern.matches(regexp,code);
    }

    public static String randomHexString(int len){
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < len; i++) {
            hexString.append(Integer.toHexString(new Random().nextInt(16)));
        }
        return hexString.toString();
    }
}
